/* 转盘动画 */
@keyframes rotate {
	from {
		transform: rotate(0deg) translateZ(0);
	}
	to {
		transform: rotate(360deg) translateZ(0);
	}
}

.wheel-rotate {
	animation: rotate 4s cubic-bezier(0.17, 0.67, 0.12, 0.99);
	will-change: transform;
	transform: translateZ(0);
}

/* 砸金蛋动画 */
@keyframes shake {
	0%, 100% {
		transform: translateX(0) translateZ(0);
	}
	25% {
		transform: translateX(-5px) translateZ(0);
	}
	75% {
		transform: translateX(5px) translateZ(0);
	}
}

.egg-shake {
	animation: shake 0.5s ease-in-out;
	will-change: transform;
	transform: translateZ(0);
}

@keyframes crack {
	0% {
		transform: scale(1) translateZ(0);
		opacity: 1;
	}
	50% {
		transform: scale(1.1) translateZ(0);
		opacity: 0.8;
	}
	100% {
		transform: scale(1) translateZ(0);
		opacity: 1;
	}
}

.egg-crack {
	animation: crack 0.3s ease-in-out;
	will-change: transform, opacity;
	transform: translateZ(0);
}

/* 刮刮乐动画 */
@keyframes scratch {
	0% {
		clip-path: inset(0 100% 0 0);
	}
	100% {
		clip-path: inset(0 0 0 0);
	}
}

.scratch-reveal {
	animation: scratch 0.5s ease-out;
	will-change: clip-path;
}

/* 集福卡动画 */
@keyframes flip {
	0% {
		transform: rotateY(0deg) translateZ(0);
	}
	100% {
		transform: rotateY(180deg) translateZ(0);
	}
}

.card-flip {
	animation: flip 0.6s ease-in-out;
	will-change: transform;
	transform: translateZ(0);
	backface-visibility: hidden;
}

/* 摇一摇动画 */
@keyframes shake-phone {
	0%, 100% {
		transform: translate(0, 0) translateZ(0);
	}
	25% {
		transform: translate(-5px, -5px) translateZ(0);
	}
	50% {
		transform: translate(5px, 5px) translateZ(0);
	}
	75% {
		transform: translate(-5px, 5px) translateZ(0);
	}
}

.phone-shake {
	animation: shake-phone 0.5s ease-in-out;
	will-change: transform;
	transform: translateZ(0);
}

/* 签到动画 */
@keyframes pulse {
	0% {
		transform: scale(1) translateZ(0);
	}
	50% {
		transform: scale(1.1) translateZ(0);
	}
	100% {
		transform: scale(1) translateZ(0);
	}
}

.sign-pulse {
	animation: pulse 0.5s ease-in-out;
	will-change: transform;
	transform: translateZ(0);
}

/* 通用动画 */
@keyframes fadeIn {
	from {
		opacity: 0;
		transform: translateY(20px) translateZ(0);
	}
	to {
		opacity: 1;
		transform: translateY(0) translateZ(0);
	}
}

.fade-in {
	animation: fadeIn 0.5s ease-out;
	will-change: transform, opacity;
	transform: translateZ(0);
}

@keyframes bounce {
	0%, 100% {
		transform: translateY(0) translateZ(0);
	}
	50% {
		transform: translateY(-10px) translateZ(0);
	}
}

.bounce {
	animation: bounce 0.5s ease-in-out;
	will-change: transform;
	transform: translateZ(0);
}

/* 奖励展示动画 */
@keyframes rewardShow {
	0% {
		transform: scale(0) translateZ(0);
		opacity: 0;
	}
	50% {
		transform: scale(1.2) translateZ(0);
	}
	100% {
		transform: scale(1) translateZ(0);
		opacity: 1;
	}
}

.reward-show {
	animation: rewardShow 0.5s ease-out;
	will-change: transform, opacity;
	transform: translateZ(0);
}

/* 性能优化类 */
.hardware-accelerated {
	transform: translateZ(0);
	backface-visibility: hidden;
	perspective: 1000;
	will-change: transform;
}

.optimize-scroll {
	overflow: auto;
	-webkit-overflow-scrolling: touch;
	backface-visibility: hidden;
}

/* 动画控制类 */
.pause-animation {
	animation-play-state: paused;
}

.stop-animation {
	animation: none;
} 